package basics.strings;

/**
 * Java 字符串示例
 * 
 * 知识点：
 * 1. 字符串基础
 *    - String 类是不可变的，一旦创建不能修改
 *    - 字符串可以通过字面量或构造函数创建
 *    - 字符串字面量存储在字符串常量池中
 *    - 使用 new 创建的字符串对象存储在堆内存中
 * 
 * 2. 字符串操作
 *    - 连接：+ 运算符或 concat() 方法
 *    - 长度：length() 方法
 *    - 大小写转换：toUpperCase(), toLowerCase()
 *    - 查找：indexOf(), lastIndexOf(), contains()
 *    - 截取：substring()
 *    - 替换：replace(), replaceAll(), replaceFirst()
 *    - 分割：split()
 * 
 * 3. 字符串比较
 *    - == 比较引用（内存地址）
 *    - equals() 比较内容
 *    - equalsIgnoreCase() 忽略大小写比较内容
 *    - compareTo() 按字典顺序比较
 * 
 * 4. 字符串格式化
 *    - String.format() 方法
 *    - 格式说明符：%s（字符串）, %d（整数）, %f（浮点数）等
 * 
 * 5. StringBuilder 和 StringBuffer
 *    - 可变字符序列，用于高效字符串操作
 *    - StringBuilder：非线程安全，性能较好
 *    - StringBuffer：线程安全，性能较差
 *    - 常用方法：append(), insert(), delete(), reverse()
 */
public class StringDemo {
    public static void main(String[] args) {
        // 字符串创建
        String str1 = "Hello";
        String str2 = new String("World");
        
        // 字符串连接
        String greeting = str1 + ", " + str2 + "!";
        System.out.println(greeting);
        
        // 字符串长度
        System.out.println("字符串长度: " + greeting.length());
        
        // 字符串方法
        System.out.println("转大写: " + greeting.toUpperCase());
        System.out.println("转小写: " + greeting.toLowerCase());
        
        // 字符串查找
        System.out.println("包含'World'? " + greeting.contains("World"));
        System.out.println("'o'的位置: " + greeting.indexOf('o'));
        System.out.println("最后一个'o'的位置: " + greeting.lastIndexOf('o'));
        
        // 字符串截取
        System.out.println("子字符串: " + greeting.substring(7, 12));
        
        // 字符串替换
        System.out.println("替换后: " + greeting.replace("World", "Java"));
        
        // 字符串分割
        String csvData = "张三,李四,王五,赵六";
        String[] names = csvData.split(",");
        System.out.println("分割后的数组:");
        for (String name : names) {
            System.out.println(name);
        }
        
        // 字符串比较
        String s1 = "hello";
        String s2 = "hello";
        String s3 = new String("hello");
        
        System.out.println("s1 == s2: " + (s1 == s2));           // true
        System.out.println("s1 == s3: " + (s1 == s3));           // false
        System.out.println("s1.equals(s3): " + s1.equals(s3));   // true
        
        // 字符串格式化
        String formatted = String.format("姓名: %s, 年龄: %d, 成绩: %.1f", "张三", 18, 92.5);
        System.out.println(formatted);
        
        // StringBuilder 示例
        StringBuilder sb = new StringBuilder();
        sb.append("Java");
        sb.append(" is");
        sb.append(" awesome!");
        System.out.println("StringBuilder结果: " + sb.toString());
        
        // StringBuilder 其他操作
        sb.insert(5, " really");
        System.out.println("插入后: " + sb);
        
        sb.delete(5, 13);
        System.out.println("删除后: " + sb);
        
        sb.reverse();
        System.out.println("反转后: " + sb);
    }
}